# 装饰器: 不侵入代码修改代码功能
# 装饰器是一个函数,它可以在不修改原有函数代码的情况下,增加额外的功能
# 不修改源程序
# 不改变函数程序的调用方式

# 以下的方式不是装饰器的模型
def foo(fn: callable):
    print("111111")
    print("222222")
    fn()


def bar():
    print("333333")
    print("444444")

foo(bar)

# 装饰器本质上就是一个闭包函数, 它的好处就是在不修改原有代码的基础上,增加额外的功能